package com.huahua.graduateschoolspringboot.handler;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.NumberUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Maps;
import com.huahua.graduateschoolspringboot.entity.po.CityLibraryBook;
import com.huahua.graduateschoolspringboot.enums.DeviceTypeEnum;
import com.huahua.graduateschoolspringboot.service.CityLibraryBookService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author LoveHuaHua
 * @date 2023年05月07日 10:44
 * @description believe in yourself
 */
@Component
@RequiredArgsConstructor(onConstructor = @__(@Lazy))
public class LibraryDeviceCommandHandler implements IDeviceCommandHandler {

    private static final Map<Integer, CityLibraryBook> data = Maps.newHashMap();

    static {
        /*
        （1）第一本书
书本信息：如图5-1。
gao deng shu xue          （书名：高等数学）
ma xiu jiao               （作者：马秀娇）
ha er bin gong cheng da xue （出版社：哈尔滨工程大学）
978-7-5661-2052-6           (ISBN)
127.5/3607                 (分类号)
CNY 32                    （书本单价）
         */
        CityLibraryBook book1 = new CityLibraryBook();
        book1.setId(1);
        book1.setName("高等数学");
        book1.setIsbn("978-7-5661-2052-6");
        book1.setAuthor("马秀娇");
        book1.setPublishingHouse("哈尔滨工程大学");
        book1.setTypeCode("127.5/3607");
        book1.setPrice(NumberUtil.toBigDecimal(32));

        /**
         * 书本信息：如图5-2。
         * web qian duan ji shu        （书名：web前端技术）
         * zhang xiao ru               （作者：张晓如）
         * xi an dian zi ke ji da xue   （出版社：西安电子科技大学）
         * 978-7-5606-5907-7            (ISBN)
         * TP126/1                     (分类号)
         * CNY 57                     （书本单价）
         */
        CityLibraryBook book2 = new CityLibraryBook();
        book2.setId(2);
        book2.setName("web前端技术");
        book2.setIsbn("978-7-5606-5907-7");
        book2.setAuthor("张晓如");
        book2.setTypeCode("TP126/1");
        book2.setPublishingHouse("西安电子科技大学");
        book2.setPrice(NumberUtil.toBigDecimal(57));
        data.put(1, book1);
        data.put(2, book2);
    }

    private final ObjectMapper objectMapper;
    private final CityLibraryBookService cityLibraryBookService;

    /**
     * 是否支持
     *
     * @param deviceType 设备类型
     * @return boolean
     */
    @Override
    public boolean support(String deviceType) {
        return DeviceTypeEnum.LIBRARY.getPackageIdentification().equals(deviceType);
    }

    /**
     * 执行
     *
     * @param objectNode 对象节点
     */
    @Override
    public void execute(ObjectNode objectNode) throws JsonProcessingException {
        //解析智能设备信息
        CityLibraryBook lightHeartDTO = objectMapper.readValue(objectMapper.writeValueAsString(objectNode), CityLibraryBook.class);
        //取出书籍信息
        CityLibraryBook cityLibraryBook = data.get(lightHeartDTO.getId());
        CityLibraryBook entity = new CityLibraryBook();
        //一键赋值
        BeanUtil.copyProperties(cityLibraryBook, entity);
        //保存或更新
        cityLibraryBookService.saveOrUpdate(entity);
    }
}
